/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ucab.desarrollo.viajesbook.persistencia;

import java.util.List;
import org.hibernate.Session;
import ucab.desarrollo.viajesbook.beans.Usuario;
import ucab.desarrollo.viajesbook.beans.Viaje;

/**
 *
 * @author Ju4nC4rlos
 */
public class ViajeDAO extends AbstractHibernateDAO<Viaje, Integer> implements IViajeDAO {

    /**
     * devuelve el tipo de objeto de dominio
     *
     *
     * @return Viaje.class
     */
    @Override
    protected Class<Viaje> getDomainClass() {
        return Viaje.class;
    }

    /**
     * metodo que crea un viaje
     * @param viaje
     */
    @Override
    public void salvar(Viaje viaje) {
        //    getHibernateTemplate().save(object);
        super.salvar(viaje);

    }

    /**
     *metodo que devuelve todos los viajes de un usuario basado en su id
     */
    public List devolverViajesdeUsuario(Integer id) {
        Session sesion = getSession();
        String consulta = "SELECT new list(l.lugarNombre as lugar, v.viajeFechaInicio as inicio, v.viajeFechaFin as fin, v.viajealojamiento as hospedaje, v.viajeppublico as publico, v.idviaje as id, u.usuarionombre as nombre, u.usuarioappellido as apellido, u.usuariocorreoelectronico as correo) FROM Lugar as l, Viaje as v, Usuario as u where l.idlugar= v.lugar and u.idusuario = v.usuario and v.idviaje in (SELECT i.viaje FROM Invitado i where i.invitadostatus='confirmado' and i.usuario="+id+")";
        return (List) sesion.createQuery(consulta).list();

    }

    public Viaje devolverUltimoViajeInsertado() {
        Session sesion = getSession();
        String consulta = "FROM Viaje as viaje WHERE viaje.idviaje in (select max(v.idviaje) from viaje v)";
        return (Viaje) sesion.createQuery(consulta).uniqueResult();
    }

    public Viaje devolverViajesPorId(Integer id) {
        Session sesion = getSession();
        String consulta = "FROM Viaje as v where v.idviaje="+id;
        return (Viaje) sesion.createQuery(consulta).uniqueResult();
    }

    public List devolverViajesdeUsuarioServicioREST(String id) {
        Session sesion = getSession();
        String consulta = "SELECT new list (l.lugarNombre as destino,v.viajeFechaInicio as inicio,v.viajeFechaFin as fin,v.viajealojamiento as hospedaje,v.viajeppublico as publico,v.idviaje as id) FROM Lugar as l,Viaje as v,Usuario as u where l.idlugar=v.lugar and v.usuario=idusuario and u.usuariocorreoelectronico='"+id+"'";
        return (List)sesion.createQuery(consulta).list();
    }
}
